package Calendari;

import java.util.ArrayList;
import java.util.List;

import Configuracio.Config;

public class Semana {

	private List<Dia> dies = new ArrayList<Dia>();

	public Semana(int numSemana, int iniciMes, int finalMes) {

		int numInici = ((numSemana * 7) + 1);
		//int diaSemana = 0;

		switch (iniciMes) {
		case 1: // diumenge

			if (numSemana == 0) {
				dies.add(new Dia(Config.getSortida().getDiesSetmana(0)));
				dies.add(new Dia(Config.getSortida().getDiesSetmana(1)));
				dies.add(new Dia(Config.getSortida().getDiesSetmana(2)));
				dies.add(new Dia(Config.getSortida().getDiesSetmana(3)));
				dies.add(new Dia(Config.getSortida().getDiesSetmana(4)));
				dies.add(new Dia(Config.getSortida().getDiesSetmana(5)));
				dies.add(new Dia(Config.getSortida().getDiesSetmana(6),
						numInici));
			} else {
				numInici -= 6;
				fillArrayWhenNotFirstWeek(numInici, finalMes);
			}
			break;

		case 2:

			fillArrayWhenNotFirstWeek(numInici, finalMes);
			break;

		case 3:

			if (numSemana == 0) {
				System.out.println(Config.getSortida().getDiesSetmana(0));
				//dies.add(new Dia(Config.getSortida().getDiesSetmana(0)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(1),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(2),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(3),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(4),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(5),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(6),
						numInici));

			} else {
				numInici -= 1;
				fillArrayWhenNotFirstWeek(numInici, finalMes);
			}
			break;

		case 4:

			if (numSemana == 0) {

				dies.add(new Dia(Config.getSortida().getDiesSetmana(0)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(1)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(2),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(3),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(4),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(5),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(6),
						numInici));

			} else {
				numInici -= 2;
				fillArrayWhenNotFirstWeek(numInici, finalMes);
			}

			break;

		case 5:

			if (numSemana == 0) {

				dies.add(new Dia(Config.getSortida().getDiesSetmana(0)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(1)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(2)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(3),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(4),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(5),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(6),
						numInici));

			} else {
				numInici -= 3;
				fillArrayWhenNotFirstWeek(numInici, finalMes);
			}

			break;

		case 6:

			if (numSemana == 0) {

				dies.add(new Dia(Config.getSortida().getDiesSetmana(0)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(1)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(2)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(3)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(4),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(5),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(6),
						numInici));

			} else {
				numInici -= 4;
				fillArrayWhenNotFirstWeek(numInici, finalMes);
			}

			break;

		case 7:

			if (numSemana == 0) {
				dies.add(new Dia(Config.getSortida().getDiesSetmana(0)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(1)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(2)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(3)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(4)));

				dies.add(new Dia(Config.getSortida().getDiesSetmana(5),
						numInici));
				numInici++;
				dies.add(new Dia(Config.getSortida().getDiesSetmana(6),
						numInici));

			} else {
				numInici -= 5;
				fillArrayWhenNotFirstWeek(numInici, finalMes);
			}
			break;
		}

	}

	private void fillArrayWhenNotFirstWeek(int aNumInici, int finalMes) {

		for (int numInici = 0; numInici < 7; numInici++) {

			if(aNumInici <= finalMes){
				
				dies.add(new Dia(Config.getSortida().getDiesSetmana(numInici),aNumInici));
				
			} else{
				
				dies.add(new Dia(Config.getSortida().getDiesSetmana(numInici)));
				
			}
			
			aNumInici++;
			
		}
	}

	public Dia getDia(int pos) {

		return dies.get(pos);

	}

	public Hora getHora(int posDia, int posHora) {

		return this.getDia(posDia).getHora(posHora);

	}

	public List<Dia> getDies() {
		return dies;
	}

	// public boolean getDia(String pos){
	//
	//
	//
	// for(int i = 0 ; i < dies.size() ; i++){
	// if(dies.get(i).getNom().equalsIgnoreCase(pos))
	// return true;
	//
	// }
	//
	// return false;
	//
	// }

	// public Hora getHora(String posDia, int posHora) {
	//
	// return this.getDia(posDia).getHora(posHora);
	// }
}
